哈摟~大家好我是阿華,今天來跟大家分享TypeScript 的 Narrowing 概念,
Narrowing
當你使用 TypeScript 時,Narrowing概念就像是一種類型的精準篩選,幫助你更準確地了解一個變數的類型。這有點像篩麵粉一樣,把雜質去掉,只保留你需要的部分。
例如,如果你有一個變量,不確定它是字串還是數字,你可以使用特殊的篩選方法來確定它的類型。一旦篩選完成,你就知道了這個變數的類型,然後可以放心地使用它。這種篩選通常使用條件檢查、類型斷言或其他技巧來實現。
總結來說,Narrowing 就像是對變數進行精準的篩選,讓你更了解它們的類型,以確保程式碼的正確性。
下面我們考慮一個 padLeft 函數,padding 可能是 number 或 string,
我們透過 if 判斷 typeof padding === "number"時,讓 TypeScript 可以推斷此時 padding 的類型是 number,
讓我們可以安全地把 padding 變數當作 number 使用
function padLeft(padding: number | string, input: string) {
if (typeof padding === "number") {
return " ".repeat(padding) + input;
}
return padding + input;
}
type guards
上面例子中我們看到的 typeof 關鍵字 在這裡當作 type guards 來使用,type guards 就像是一種工具或方法,可以幫助我們確定變數的類型。
正如我們所知道的,JavaScript 支援 typeof 運算符,它可以提供有關運行時值類型的非常基本的資訊。
它會回傳:
"string"
"number"
"bigint"
"boolean"
"symbol"
"undefined"
"object"
"function"
而對我們來說,我們現在知道可以透過這種方法來篩選變數的類型,讓我們放心地使用它。
這回就到這裡,下回我們來聊泛類型 Generics~